package org.moore.controller;

import org.moore.model.Map;
import org.moore.utils.Countdown;
import org.moore.utils.Data;
import org.moore.view.GameFrame;
import org.moore.view.GamePanel;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

// 主界面监听类
public class GameModeButtonListener implements ActionListener {
    // 定义游戏面板
    private final GamePanel gamePanel;
    // 构造函数
    public GameModeButtonListener(GamePanel gamePanel) {
        this.gamePanel = gamePanel;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        // 创建一个新的字体对象
        Font newFont = new Font("宋体", Font.PLAIN, 18);
        // 设置所有的OptionPane字体
        UIManager.put("OptionPane.messageFont", newFont);
        UIManager.put("OptionPane.buttonFont", newFont);
        // 获取动作命令
        String action = e.getActionCommand();
        // 根据指令执行不同的代码
        switch (action) {
            // 步数模式
            case "step" :
                GamePanel.getCardLayout().show(gamePanel,"level");
                Map.setMapType(1);
                GameFrame.getGameBar().getRestartItem().setEnabled(true);
                GameFrame.getGameBar().getStartItem().setEnabled(false);
                GameFrame.getGameBar().getHomeItem().setEnabled(true);
                resetGame();
                break;
                // 时间模式
            case "time" :
                GamePanel.getCardLayout().show(gamePanel,"level");
                Map.setMapType(2);
                GameFrame.getGameBar().getRestartItem().setEnabled(true);
                GameFrame.getGameBar().getStartItem().setEnabled(false);
                GameFrame.getGameBar().getHomeItem().setEnabled(true);
                resetGame();
                break;
                // 游戏说明
            case "description" :
                JOptionPane.showMessageDialog(gamePanel, "游戏介绍：消消乐是一种很受欢迎的游戏，\n" +
                        "游戏可以让我们缓解压力，提高愉悦感。\n" +
                        "此版本添加了武侠元素，使您置身其中。");
                break;
            case "exit" :
                // 退出选项设置
                Object[] options = { "退出", "取消" };
                int input = JOptionPane.showOptionDialog(gamePanel, "您真的要退出吗？", "确认退出",
                        JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options[0]);
                // 退出选项判断
                if (input == 0) {
                    // 关闭窗口
                    System.exit(0);
                }
                break;
            default:
                throw new IllegalStateException("Unexpected value: " + action);
        }
    }

    public static void resetGame() {
        // 重置数值
        Data.SCORE = 0;
        if (Map.isMapType() == 1) {
            Data.STEPS = 15;
        } else if (Map.isMapType() == 2) {
            try {
                Countdown.pause();
            } catch (Exception ex) {
                System.out.println();
            }
        }
        Data.COUNT = 0;
        Data.CUSTOM = 0;
        Data.SCORE = 0;
        new Countdown(40);
    }
}
